﻿using System.ComponentModel;

namespace AT.IBMS.Framework.Controls
{

    /// <summary>
    /// 为 <see cref="AspNetPager" /> 控件的 <see cref="AspNetPager.PageChanging" /> 事件提供数据。无法继承此类。
    /// </summary>
    /// <remarks>
    /// <see cref="AspNetPager"/> 分页控件会在下列情况下引发 <see cref="AspNetPager.PageChanging"/>事件：<ol>
    /// <li>使用PostBack方式分页，分页控件的页导航元素之一被单击或用户输入页索引值然后点击跳转按钮或按回车键时；</li>
    /// <li>使用Url方式分页，页面第一次加载时（没有产生回发时）。</li>
    /// </ol>
    /// <p>
    /// PageChanging事件发生在AspNetPager控件处理分页操作之前，一个 PageChangingEventArgs 对象被传递给该事件的处理程序，您可以从该对象传递的数据中获取用户要跳转到的新的页索引以及决定是否取消分页事件，
    /// 要取消分页事件，将 PageChangingEventArgs 的 Cancel 属性设置为true即可（该方法仅适用于PostBack方式分页时，Url方式分页时因为无法获取分页前的页面状态及上一页的页索引，所以不理会该属性的值而继续引发 <see cref="AspNetPager.PageChanged"/> 事件来实现分页操作）。
    /// </p>
    /// <p>有关 PageChangingEventArgs 实例的初始属性值列表，请参阅 PageChangingEventArgs 构造函数。</p>
    /// </remarks>
    public sealed class PageChangingEventArgs : CancelEventArgs
    {
        private readonly int _newpageindex;

        /// <summary>
        /// 使用新页面索引初始化 PageChangingEventArgs 类的新实例。
        /// </summary>
        /// <param name="newPageIndex">要跳转到的新页面的页索引。</param>
        public PageChangingEventArgs(int newPageIndex)
        {
            _newpageindex = newPageIndex;
        }

        /// <summary>
        /// 获取用户在 <see cref="AspNetPager" /> 控件的页选择元素中选定的或在页索引文本框中手工输入的页的索引。
        /// </summary>
        /// <value>
        /// 用户在 <see cref="AspNetPager" /> 控件的页选择元素中选定的或在页索引文本框中输入的页的索引。
        /// </value>
        /// <remarks>
        /// 使用 NewPageIndex 属性确定用户在 <see cref="AspNetPager" /> 控件的页选择元素中选定的或在页索引文本框中输入的页的索引。
        /// 该值常用于设置要显示选定页的 AspNetPager 控件的 <see cref="AspNetPager.CurrentPageIndex" /> 属性。
        /// </remarks>
        public int NewPageIndex
        {
            get
            {
                return _newpageindex;
            }
        }
    }

}
